package com.whu.tcx01.utils;

import com.alibaba.druid.pool.DruidDataSource;

import java.sql.Connection;

public class DbUtils {
    private static DruidDataSource dataSource=null;

    //synchronized 保证一次只有一个线程在使用
    public static synchronized void GetDbConnect() throws Exception  {
        try{
            if(dataSource==null){
                dataSource=new DruidDataSource();
                //设置连接参数
                dataSource.setUrl("jdbc:postgresql://localhost:5432/postgres");
                dataSource.setDriverClassName("org.postgresql.Driver");
                dataSource.setUsername("postgres");
                dataSource.setPassword("postgres");
                //配置初始化大小、最小、最大
                dataSource.setInitialSize(1);
                dataSource.setMinIdle(1);
                dataSource.setMaxActive(20);
                //连接泄漏监测
                dataSource.setRemoveAbandoned(true);
                dataSource.setRemoveAbandonedTimeout(30);
                //配置获取连接等待超时的时间
                dataSource.setMaxWait(20000);
                //配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒
                dataSource.setTimeBetweenEvictionRunsMillis(20000);
                //防止过期
                dataSource.setValidationQuery("SELECT 'x'");
                dataSource.setTestWhileIdle(true);
                dataSource.setTestOnBorrow(true);
            }
        }catch(Exception e){
            throw e;
        }
    }

    /**
     * 取得已经构造生成的数据库连接
     * @return 返回数据库连接对象
     * @throws Exception
     */
    public static synchronized Connection getConnect() throws Exception{
        Connection con=null;
        try {
            GetDbConnect();
            con=dataSource.getConnection();
        } catch (Exception e) {
            throw e;
        }
        return con;
    }
}
